類別屬性和存取子
類別的成員有欄位(field)和屬性(Attribute);欄位亦稱"執行個體欄位(Instance Feild)",屬性(Property)則是物件靜態特徵的呈現。
前述範例中,將欄位的存取範圍設為public,外界可直接存取,會使類別內的資料成員無法受到保護。所以採取的作法是以存取修飾詞限定欄位的存取(封裝的基本存取),再利用類別內的方法存取欄位值。
以欄位而言,它所宣告的位置需在類別內、方法外(方法內所宣告的變數稱為"區域變數"),可視為類別內的"全域變數"。
為了不讓外部存取欄位內容,更彈性的作法就是將欄位改成屬性的副本,經由公開的屬性來存取私有的欄位,這種作法為”支援存放(baking store)”。
配合”存取子(Accessor)”的get或set做讀取、寫入或計算之私用(Private)。讓類別在”資訊隱藏”機制下,又能以公開方式提供設定或取得屬性值,提升方法的安全性和彈性。
屬性的語法如下:
private 資料型別 欄位名稱;
public 資料型別 屬性名稱
{
get{return 欄位名稱;}
set{欄位名稱 = value;}
}
//存取子set指定新值給屬性時要使用關鍵字value,同樣要有程式區段
//存取子get用來回傳屬性值,屬性被讀取時會執行其程式區段
//屬性中只有存取子get,表示是一個唯讀屬性;若只有存取予set,表示是一個唯寫屬性;若兩者皆有,表示能讀能寫
要注意的是,屬性不能歸類為變數,它與欄位不同。
使用屬性時:
那麼屬性的存取子get和set,又是如何指定新值,回傳屬性值?
執行 chris.title = Console.ReadLine(); 敘述時,會取得使用者輸入的名字,表示title屬性能經由外部給予新值。存取子set會以value這個隱含引述來接受並指派給欄位name;而存取子get則以return敘述回傳name的欄位值。
以上來源:從零開始學visual C# 2017程式設計、W3Schools、詢問chatGPT
內容有誤的話,請留言或發訊息給我